// 解析：
// 回溯法：通过递归不断尝试所有可能的排列组合，回溯过程中撤销之前的选择。
// used 数组：用来标记当前递归路径中已经选择过的元素，避免重复选择。
// path 数组：存储当前构造的排列，当 path.length === nums.length 时，表示找到一个完整的排列，将其存入 res。
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function(nums) {
    let res = []
    let used = new Array(nums+1).fill(false)
    const backtrack=(path)=>{
        if(path.length === nums.length){
            res.push([...path])
        }
        for (let i = 0; i < nums.length; i++) {
            if(used[i])continue
            path.push(nums[i])
            used[i] = true
            backtrack(path)
            path.pop()
            used[i] = false
        }
    }
    backtrack([])
    return res
};
console.log(permute([1,2,3]));
